<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
      <link rel="stylesheet" href="helpwin.css">
      <title>MATLAB File Help: corrint</title>
   </head>
   <body>
      <!--Single-page help-->
      <table border="0" cellspacing="0" width="100%">
         <tr class="subheader">
            <td class="headertitle">MATLAB File Help: corrint</td>
            <td class="subheader-left"><a href="corrint.m">View code for corrint</a></td>
            <td class="subheader-right"><a href="Contents.html">WFDB Contents</a></td>
         </tr>
      </table>
      <div class="title">corrint</div>
      <div class="helptext"><pre><!--helptext -->


function varargout=corrint(varargin)

 [y1,y2,y3]=corrint(x,embeddedDim,timeLag,timeStep,distanceThreshold,neighboorSize,estimationMode,findScaling)

 Correlation integral analysis of a time series. Based on:

 [1] Kaplan, Daniel, and Leon Glass. Understanding nonlinear dynamics. Vol. 19. Springer, 1995.
 [2] Kantz, Holger, and Thomas Schreiber. Nonlinear time series analysis. Cambridge university press, 2004.

 Required input parameter:
 x
       Nx1 matrix (doubles) of time series to be analyzed.

 Optional Parameters are:

 embeddedDim
        1x1 Integer specifying the embedded dimension size to use (default
        =2).

 timeLag
       1x1 Integer specifying the minimum time lag distance (in samples) of the point to
       be estimated. Default is 2. If timeLag=-1 the timeLag is estimated
       from the first zero-crossing point of the autocorrelation of x.

 timeStep
       1x1 Integer specifying time lag distance (in samples) within
       each point used in the embeddedDimm vector. For example, if embeddedDim
       is 3 and timeStep =2, then the embedded dimension vector will consists of
       3 samples separated by 2 samples each, covering a window of size of 7 samples.

 distanceThreshold
       1x1 double specifying the distance threshold between embedded
       points. The points who's distance is less than distanceThreshold are considered in
       the same neighborhood and used for either prediction, recurrence, or the
       estimation of the embedded dimension.

 neighboorSize
      1x1 Integer specifying the number of neighbors to be used for
      prediction and smoothing (see 'estimationMode' parameter).

 estimationMode
       String specifying what analysis type to be done in the time series.
       Options are:
                       'recurrence'  -Calculates recurrence data to be used
                                      in for recurrence plots (default).
                       'dimension'   -Generates statistics for the estimation of the correlation dimension
                                      of the time series and it's scaling
                                      regions.
                       'prediction'  -Predicts second half of the time
                                      series using the first half as a model
                                      and neighboorSize nearest points.
                       'smooth'      -Predicts all point of the times
                                      series using all other points as a
                                      model and neighboorSize nearest
                                      points.

 findScaling
      1x1 Boolean flag to be passed when using 'dimension' mode. If set to
      true, the scaling region will be searched automatically, using
      r1=std(x)/4 and r2 -> C(r1)/C(r2) ~ 5. Default value is false.

 The output returned by CORRINT is dependent on the 'estimationMode'
 parameter, so that the description of the output below is broken down into the
 different possible options for the 'estimationMode' parameter.

 Output Parameters - 'recurrence' mode
 y1 
		Lx1 Vector of integers for state i.
 y2 
		Lx1 Vector of integers for state state j that is a neighbor of state i (first column).

 Output Parameters - 'dimension' mode
 y1 
		Lx1 Vector of doubles of log(distanceThreshold). 
 y2 
		Lx1 Vector of doubles for log(neighborhood size) given the distanceThreshold used in column 1.
 y3
       1x1 double. Optional, estimated slope of y1 and y2 

 Output Parameters - 'prediction' mode
 y1 
		Lx1 Vector of doubles of estimated second half of the time series. 
 y2 
		Lx1 Vector of doubles for original second half of the time series.
 y3
       1x1 double. Optional, variance of the prediction error divided by variance of the second half of the time series. 


 Output Parameters - 'smooth' mode
 y1 
		Lx1 Vector of doubles of smoothed the time series. 
 y2 
		Lx1 Vector of doubles for original time series.
 y3
       1x1 double. Optional, variance of the prediction error divided by variance of the time series. 


 %%% Beging Example %%%
 
 N=500; %Number of points for each process
 model_names={'linearModel','nonlinearModel'};
 
 %Linear Auto Regressive model with measurement noise
 linearModel=zeros(N,1);
 x=77;
 linearModel(1)=x;
 for n=2:N
     x=4 + 0.95*x;
     linearModel(n)= x + randn(1)*2;
 end
 
 %Non-linear model of dimension ~ 3.9
 nonlinearModel=zeros(N,1);
 x=0.2;y=0.2;z=0.2;v=0.2;model_five(1)=x;
 for n=2:N
     m=0.4 - 6/(1+ x^2 + y^2);
     xold=x;yold=y;zold=z;vold=v;
     x= 1 + 0.7*(xold*cos(m)-yold*sin(m)) + 0.2*zold;
     y=0.7*(xold*sin(m) + yold*cos(m));
     z=1.4 + 0.3*vold - zold^2;
     v=zold;
     nonlinearModel(n)= x + 0.3*z + randn(1)*0.05;
 end
 
 %Plot time series
 figure(1)
 for i=1:2
     subplot(2,1,i)
     eval(['plot(' model_names{i} ');legend(''' model_names{i} ''')'])
     title('Time Plot');xlabel('time')
 end
 
 %Plot cross correlation
 figure(2)
 for i=1:2
     subplot(2,1,i)
     eval(['x=' model_names{i} ';'])
     R=xcorr(x-mean(x),'coeff');
     plot(R(round(N):end))
     eval(['legend(''' model_names{i} ''')'])
     title('Autocorelation'); xlabel('lag')
 end
 
 %Plot Phase Plots
 figure(3)
 for i=1:2
     subplot(2,1,i)
     eval(['x=' model_names{i} ';'])
     scatter(x(1:end-1),x(2:end))
     eval(['legend(''' model_names{i} ''')'])
     title('Phase Plot');xlabel('x(t)');ylabel('x(t+1)')
 end
 
 %Plot prediction errors vs surrogate 
 timeLag=1;
 timeStep=1;
 distanceThreshold=[];
 embeddedDim=4;
 estimationMode='smooth';
 figure(4)
 K=[1:20 25 30 50 70 100];
 D=length(K);
 surrN=10;
 for i=1:2
     eval(['x=' model_names{i} ';'])
     err=zeros(D,1)+NaN;
     surr_data=zeros(D,surrN);
     SURR=surrogate(x,surrN);
     for d=1:D;
         neighboorSize=K(d);
         [y1,y2,y3]=corrint(x,embeddedDim,timeLag,timeStep,distanceThreshold,neighboorSize,estimationMode);
         err(d)=y3;
         for s=1:surrN
             [y1,y2,y3]=corrint(SURR(:,s),embeddedDim,timeLag,timeStep,distanceThreshold,neighboorSize,estimationMode);
             surr_data(d,s)=y3;
         end
     end
     subplot(2,1,i)
     plot(K,err,'o-');hold on
     errorbar(K,mean(surr_data,2),var(surr_data,[],2)./sqrt(10),'r')
     eval(['legend(''' model_names{i} ''',''surrogate'')'])
     xlabel('Embedded Dimension')
     ylabel('err/var')
     
 end

 %%% End Example %%%

 Written by Ikaro Silva, 20134
 Last Modified: November 23, 2014
 Version 1.0

 Since 0.9.8


 See also SURROGATE, DFA, MSENTROPY
</pre></div><!--after help -->
   </body>
</html>
